export default class Background extends Sprite {

  constructor() {
    super();

    this.BG_WIDTH = 1600;// 背景图片的宽度
    this.moveX = 0;// 舞台左移动的距离
    this.isGrassFinished = true;// 草堆是否完成复位

    this.init();
  }

  init() {

    // 获取背景图片
    const bgTexture = Laya.loader.getRes('res/background.png');

    this.bg1 = new Sprite();
    this.bg2 = new Sprite();
    this.bg1.graphics.drawTexture(bgTexture, 0, 0);
    this.bg2.graphics.drawTexture(bgTexture, 0, 0);
    this.addChild(this.bg1);
    this.addChild(this.bg2);

    this.bg2.pos(this.BG_WIDTH, 0);

    // 草堆
    const classTexture = Laya.loader.getRes('res/m_background.png');
    this.grass = new Sprite();
    this.grass.graphics.drawTexture(classTexture, 0, 0);
    this.addChild(this.grass);

    // 创建一个帧循环处理函数，用于背景位置的更新，实现背景滚动效果。
    Laya.timer.frameLoop(1, this, this.onLoop);
  }

  onLoop() {

    if(gamePauseHandle(this, this.onLoop)) return ;

    /**
     * # 背景图
     * 1. 背景移动 即人物跑动
     * 2. 需要两幅背景图交替移动
     */
    this.x -= Config.baseSpeed;
    this.moveX = Math.abs(this.x);
    // 可理解为背景图超出 1600
    if(this.moveX - this.bg1.x >= this.BG_WIDTH) this.bg1.x += this.BG_WIDTH * 2;
    if(this.moveX - this.bg2.x >= this.BG_WIDTH) this.bg2.x += this.BG_WIDTH * 2;
    this.grass.x -= Config.baseSpeed * 1.5;


    /**
     * # 草堆
     * 1. 模仿两个bg图片的做法
     * 2. 使用setTimeout加随机数 实现范围内随机时间间隔的显示
     * 3. 使用随机数 实现每次出现的时间间隔不一样
     */
    if(this.isGrassFinished) {
      if(this.moveX - this.grass.x >= Config.deviceWidth) {// Config.deviceWidth是随便拿的，其实应该拿草图片的宽度
        this.isGrassFinished = false;
        setTimeout(() => {
          this.grass.x = this.moveX + Config.deviceWidth;// * Math.random().toFixed(1)
          this.isGrassFinished = true;
        }, 3500 + 5000 * Math.random().toFixed(1));
      }
    }
  }
}